perm filename ARMSW[SYS,HE]10 blob sn#058821 filedate 1973-08-21 generic text, type T, neo UTF8
00100	COMMENT ⊗   VALID 00017 PAGES 
00200	RECORD PAGE   DESCRIPTION
00300	 00001 00001
00400	 00003 00002	IFN USER+TRACK,<0>
00500	 00005 00003	NXTJIF:
00600	 00007 00004	WATSTL:	CONI CLOCK,AC
00700	 00009 00005	MAIN:	TRNE RUN
00800	 00012 00006	TT:	PUSHJ P,REFLEX
00900	 00013 00007	ANGLES:	MOVEI I,5
01000	 00016 00008	IFE USER,<
01100	 00017 00009	SERVO:	TRNN RUN
01200	 00019 00010	DRIVE:
01300	 00022 00011	IFN SIMU,<			IF IN SIMU PREDICT NEXT VALUE OF THETA
01400	 00024 00012	NXTH:	MOVE AC,[XWD T0,T0P]
01500	 00027 00013	EVAL:	MOVEI I,5
01600	 00032 00014	DHO:	AOJ I,			DISASTER HAS OCCURED
01700	 00035 00015	NEXT:	TRNE RUN
01800	 00039 00016	PREAD:
01900	 00041 00017	NON:	POINT 12,INNER(AC),11
02000	 00045 ENDMK
02100	⊗;
     

00100	IFN USER+TRACK,<0>
00200	STRADR:	MOVE BITSAV	;Enters here every 1/60 th. seccond
00300	IFE USER+TRACK,<
00400		TRNE DTST
00500		CALLI 400024
00600		DATAO ARM,[2]
00700		SOSLE STWT
00800		CALLI 400024
00900	>
01000		MOVE P,[XWD -PDLL,PDL]	;PUSH DOWN STACK
01100		MOVE CBUF,CBUFS
01200		MOVE DATWD,DATWDS
01300		IORI DATWD,2		;YELLOW ARM
01400	IFN REPORT+TRACK,<
01500		MOVE DATA,DATPT
01600	>
01700	IFN USER+TRACK,<
01800		TRNE DTST
01900		JRST SWDONE
02000	>
02100	IFE USER,<
02200	IFN TRACK,<
02300		SKIPE WALK
02400		JRST NCHK
02500	>
02600		CONSZ 40		;CHECK TO SEE IF ON PDP-6
02700		JRST[	MOVEI TAC,PDPERR
02800			MOVEM TAC,TRAJER
02900			JRST TOFF]
03000		CONI 0,AC
03100		ANDI AC,7
03200		CONO 0,2050(AC)
03300		TRZE TRIP		;TURN ON ARM
03400		DATAO ARM,[3]
03500	>
03600	NCHK:
03700		MOVEI K,51B23		;-10 VOLT REFERENCE
03800	IFE USER,<PUSHJ P,PREAD		;REFTR← -10 volt reference
03900		LDB AC,SNUM		;PICK UP MIDDLE SAMPLE
04000		ANDI DACVAL,7777	;LEAVE LAST SAMPLE IN J
04100		ADDI AC,(DACVAL)	;ADD THEM TOGETHER
04200	>
04300	IFN USER,<MOVEI AC,17770>
04400		CAIGE AC,17000		;IS THE FUSE BLOWN
04500		JRST[		MOVEI TAC,REFERR
04600				MOVEM TAC,TRAJER
04700				JRST TOFF]
04800		MOVEM AC,REFTR		;REFERENCE READING
04900	IFN TRACK,<
05000		SKIPE WALK
05100		JRST TOK
05200	>
05300		MOVEI AC,=16666
05400		MOVEM AC,ETIME
05500		MOVSI AC,(1.0)
05600		MOVEM AC,TDF
05700	IFE USER,<
05800		CONI CLOCK,AC
05900		TLZ AC,777774
06000		JRST STIME		;TIME IN MICRO SECONDS
06100	>
06200	IFN USER,<JRST .+2>
     

00100	NXTJIF:
00200	IFN USER,<JRST SWDONE>
00300	IFN DEB<
00400		MOVEM 17,ACSAV+17
00500		MOVEI 17,ACSAV
00600		BLT 17,ACSAV+16
00700		MOVE 17,ACSAV+17
00800	>
00900	IFN TRACK,<
01000		SKIPE WALK
01100		JRST TOK
01200	>
01300	IFN REPORT+TRACK,<
01400		HRRZI TAC,(DATA)
01500		CAIL TAC,DATO+DBL-1
01600		JRST[	SUB DATA,[XWD DBL,DBL]
01700			MOVE TAC,[XWD DATO+DBL,DATO]
01800			BLT TAC,(DATA)
01900			HRRZI AC,(DATA)
02000			HRRZ TAC,DATIWD
02100			SUBI AC,(TAC)
02200			JRST RDP]
02300		HRRZI AC,(DATA)
02400		HRRZ TAC,DATIWD
02500		SUBI AC,(TAC)
02600		HRRZ MQ,DATPT
02700		SUBI TAC,(MQ)
02800		IMUL AC,TAC
02900	RDP:	SKIPLE AC
03000	IFN TRACK,<PUSH DATA,[0]>
03100	IFN REPORT,<PUSH DATA,[SIXBIT/ERROR/]>
03200		MOVEI AC,DATO-1
03300		HRRZ TAC,DATIWD
03400	 	CAIL TAC,DATO+DBL-1
03500		HRRM AC,DATIWD
03600		MOVEM DATA,DATPT
03700	>
03800	IFE USER,<
03900		MOVEI TAC,=2000
     

00100	WATSTL:	CONI CLOCK,AC
00200		TLZ AC,777774
00300		SUB AC,LTIME
00400		JUMPGE AC,.+2
00500		ADD AC,[=1000000]
00600	IFN REPORT,<
00700		CAIN TAC,=2000
00800		JRST[	PUSH DATA,[<SIXBIT/TICK/>+1]
00900			PUSH DATA,AC
01000			JRST .+1]
01100	>
01200		MOVEM AC,ETIME
01300		TRNE RUN
01400		JRST[	MOVE MQ,AC
01500			FSC MQ,233
01600			FMPR MQ,[0.00006]
01700			MOVEM MQ,TDF
01800			MOVE AC,LTIME
01900			ADD AC,ETIME
02000			JRST SSTIME]
02100		CAIGE AC,=16667		;delta T greater than 16.7 msec.?
02200		SOJGE TAC,WATSTL
02300		JUMPL TAC,TE
02400		MOVSI AC,(1.0)
02500		MOVEM AC,TDF
02600		MOVE AC,LTIME
02700		ADDI AC,=16667
02800	SSTIME:	TLNE AC,777774
02900		SUB AC,[=1000000]
03000	STIME:	MOVEM AC,LTIME		;LTIME←LTIME+16.7 msec.
03100	>
03200		SOSGE COUNT
03300		JRST[TE:MOVEI AC,TERR
03400			MOVEM AC,TRAJER
03500			JRST ZITO]
     

00100	MAIN:	TRNE RUN
00200		JRST[	PUSHJ P,EVAL
00300			PUSHJ P,NXTH
00400			JRST .+1]
00500		MOVEI J,6
00600		PUSHJ P,ANGLES		;read joint angles
00700		TRNE RONLY		;read angles only?
00800		JRST[	PUSHJ P,HEAD	;read hand also
00900			MOVE AC,HAND
01000			MOVEM AC,SET
01100			PUSHJ P,REFLEX
01200			PUSHJ P,READED]	;DOES NOT RETURN
01300		TRNN RUN
01400		JRST[	SKIPG TAC,FUNCT	;not run, mabye a function
01500			PUSHJ P,SETSET
01600			JUMPL TAC,NEXT
01700			JUMPE TAC,[CAIL CBUF,BUF;try next buffer
01800				SETOM (CBUF)	;dont do this if first buffer
01900				MOVEM CBUF,CBUFS
02000				ADDI CBUF,1001
02100				CAILE CBUF,BUF2
02200				MOVEI CBUF,BUF		;Advance buffer
02300				MOVE 2,(CBUF)
02400				JUMPL 2,[BUFWT:MOVE CBUF,CBUFS;wait for buffer
02500					JRST SWDONE]
02600				JUMPN 2,BUFRDY		;the last buffer stop.
02700				JRST[	TRO DTST
02800					MOVEI 2,WAITIN
02900					HRRM 2,JUMPBK
03000					MOVEM 2,STKPTR
03100			IFN REPORT,<PUSH DATA,[0]>
03200					JRST BUFWT]
03300			BUFRDY:	HRRZ 2,(CBUF)
03400				ADDI 2,-1(CBUF)
03500				HRRZM 2,STKPTR
03600				JRST NEXT]
03700			CAIN TAC,6
03800			JRST SETCH
03900			JRST TT]	;otherwise perform function
04000		JUMPE J,[RUDONE:
04100			TRNN NSET
04200			PUSHJ P,SETSET
04300			TRZ DROP+RUN+FINAL+WOB	 	;if J is zero then end of run
04400			TDZ DATWD,[770001252500]
04500			TRZE STP
04600			JRST[	MOVEI TAC,STPERR
04700				MOVEM TAC,TRAJER
04800				POP P,TAC
04900				JRST TOFF]
05000			SKIPN AC,FUNCT
05100			JRST NEXT
05200			CAIN AC,22
05300			JRST[	TRZ HCL
05400				SETZM TDAT
05500				SETZM FUNCT
05600				DATAO DEVT,TDAT
05700				JRST NEXT]
05800			MOVEI AC,=16667
05900			MOVEM AC,ETIME
06000			JRST .+1]
     

00100	TT:	PUSHJ P,REFLEX
00200	DISP:	MOVE AC,FUNCT
00300		JUMPL AC,.+2
00400		CAILE AC,MAXFN
00500		JRST[	MOVEI TAC,FUNERR
00600			MOVEM TAC,TRAJER
00700			JRST TOFF]
00800		JRST @.+1(AC)		;Perform function
00900		NXTJIF	;0
01000		HOPEN	;1
01100		HCLOSE	;2
01200		NXTJIF	;3
01300		PLACE	;4
01400		NUDGE	;5
01500		SETCH	;6
01600		STOP	;7
01700		SAVE	;10
01800		RESTORE	;11
01900		CENTER	;12
02000		SET.ARM	;13 SET_ARM
02100		WOBBLE	;14
02200		SEARCH	;15
02300		AOJI	;16
02400		SLAVE	;17
02500		HOME	;20
02600		PATH	;21
02700		TOOL	;22
02800	
02900		XLIST
03000		SUBTTL	SPACEWAR CODE	ANGLE MEASUREMENT	LOU PAUL
03100		LIST
     

00100	ANGLES:	MOVEI I,5
00200		JFCL 10,.+1
00300		MOVEI L,10
00400	IFN REPORT,<PUSH DATA,[<SIXBIT/THETA/>+6]>
00500	SETCHA:	MOVEI K,CHA
00600		TRNE ALT6
00700		MOVEI K,N6CHA
00800		SKIPA
00900	RSTRT:	MOVE K,CHAN(I)
01000		SOJL L,REDER
01100	IFE USER,<
01200		PUSHJ P,PREAD
01300		LDB AC,SNUM
01400		CAIN I,5
01500		JRST[	TRNE POTREAD
01600			JRST .+1
01700			CAIL AC,1000
01800			CAILE AC,7000
01900			JRST[	TRC ALT6
02000				JRST SETCHA]
02100			MOVEI K,CHA5
02200			JRST .+1]
02300		ANDI DACVAL,7777
02400		ADDI AC,(DACVAL)
02500		SETZ TAC,
02600		DIV AC,REFTR
02700		ASH AC,-26
02800		MOVE TAC1,AC
02900		TRNE POTREAD
03000		JRST[	ADDI TAC1,=1000
03100			JRST EXON]
03200		ASHC AC,-11		;LEAVE INDEX INTO NON-LINEAR DIFF TABLE IN AC
03300		LDB MQ,NON(I)		;GET LOWER DIFF
03400		ADDI TAC1,(MQ)		;ADD IT TO READING
03500		AOJ AC,
03600		LDB AC,NON(I)		;GET UPPER DIFFERENCE
03700		SUBI AC,(MQ)
03800		MUL TAC,AC		;INTERPOLATE
03900		ADD TAC1,TAC		;CORRECTED READING
04000		FSC TAC1,226		;FLOAT
04100		FMPR TAC1,SCALE(I)
04200		FADR TAC1,OFF(I)
04300	>
04400	IFN USER,<MOVE TAC1,TH(I)>
04500		CAIN I,5
04600		JRST[	TRNE ALT6
04700			FADR TAC1,OFF6
04800			FADR TAC1,ROT6
04900			MOVEM TAC1,TH+5
05000			FSBR TAC1,T0+5
05100			MOVSI MQ,(180.0)
05200			CAML TAC1,MQ
05300			JRST[	INCROT:	MOVN MQ,MQ
05400					FSC MQ,1
05500					FADRM MQ,ROT6
05600					FADRM MQ,TH+5
05700					JRST THS]
05800			MOVN MQ,MQ
05900			CAMG TAC1,MQ
06000			JRST INCROT
06100			JRST THS]
06200	EXON:	MOVEM TAC1,TH(I)		;THETA
06300	THS:
06400	IFE USER,<CAILE I,2>
06500		JRST[	MOVE AC,TH(I)
06600			EXCH AC,THP(I)
06700			FSBR AC,THP(I)
06800			FDVR AC,TDF
06900			MOVNM AC,TD(I)
07000			JRST SERVO]
07100	IFN REPORT,<
07200		MOVE MQ,TH(I)
07300		FSBR MQ,T0(I)
07400		PUSH DATA,MQ
07500	>
     

00100	IFE USER,<
00200		MOVE K,VCHAN(I)
00300	NVEL:	PUSHJ P,PREAD
00400		LDB AC,SNUM
00500		ANDI DACVAL,7777
00600		ADDI AC,(DACVAL)
00700		TRNE VZERO
00800		MOVEM AC,VZ(I)
00900		SUB AC,VZ(I)
01000		FSC AC,216
01100		FMPR AC,VSCALE(I)
01200	IFN TACH,<
01300		TRNE VZERO
01400		SETZM VDTH(I)
01500		FADRM AC,VDTH(I)
01600	>
01700		MOVEM AC,TD(I)
01800	>
01900		XLIST
02000				SUBTTL			SPACEWAR CODE			SERVO CALC.			LOU PAUL
02100		LIST
     

00100	SERVO:	TRNN RUN
00200		JRST[	SOJGE I,RSTRT
00300			POPJ P,]
00400	SERVL:	MOVE TAC,TH(I)
00500		FSBR TAC,T0(I)		;POSITION ERROR
00600		MOVEM TAC,ET0(I)
00700		TRNE FINAL
00800		JRST NULL		;MODIFY THETA BY INTEGRAL TERM
00900		MOVE TAC1,T0(I)
01000		FSBR TAC1,T0P(I)
01100		FDVR TAC1,TDF
01200		MOVE AC,TAC1
01300		FSBR AC,TDP(I)
01400		MOVEM TAC1,TDP(I)
01500		FDVR AC,TDF
01600		MOVEM AC,TDD(I)
01700		FMPR AC,CII(I)
01800	MODT0:	HRRZ K,BMASK(I)
01900		TDNN K,FBI
02000		JRST [	PDIR:SETZM ET0(I)
02100			FMPR AC,CII(I)
02200			JRST NOBACK]
02300		FADRM TAC,ERRINT(I)
02400	IFE STEP,<
02500		MOVN TAC,TD(I)
02600		FADR TAC,TAC1
02700	>
02800	IFN STEP,<MOVN TAC,TD(I)>
02900		FMPR TAC,KV(I)		;VELOCITY GAIN
03000		FADR AC,TAC
03100		FMPR AC,CII(I)
03200		MOVN TAC,ET0(I)
03300		FMPR TAC,KE(I)		;ERROR GAIN
03400		FADR AC,TAC
03500		MOVN TAC,ERRINT(I)
03600		FMPR TAC,KI(I)
03700		FDVR TAC,CII(I)
03800		FADR AC,TAC
03900	NOBACK:	CAIE I,2
04000		FMPR AC,[IRAD:0.0174532925]	;JOINT 3 IS IN INCHES
04100		MOVEM AC,TORE(I)
04200		FADR AC,CI(I)		;GRAVITY TERM
04300		MOVEM AC,T(I)			;ERROR CORRECTION TORQUE
04400		XLIST
04500				SUBTTL			SPACEWAR CODE			DRIVE CALC.			LOU PAUL
04600		LIST
     

00100	DRIVE:
00200	IFN REPORT,<PUSH DATA,[<SIXBIT/DAC/>+6]>
00300	LS0:	TDNN DATWD,BMASK(I)
00400		JRST ISP
00500		MOVE MQ,TD(I)
00600		JUMPN MQ,.+2
00700		MOVN MQ,ET0(I)
00800		FMPR MQ,T(I)
00900		JUMPL MQ,[	MOVM MQ,T(I)
01000				FSBR MQ,F0(I)
01100				JUMPL MQ,[	FDVR MQ,F0(I)
01200						FMPR MQ,V0(I)
01300						FSC MQ,1
01400						FADR MQ,V0(I)
01500						SKIPGE T(I)
01600						MOVN MQ,MQ
01700						JRST CEMF]
01800				MOVSI AC,(1.0)
01900				FSBR AC,PK(I)
02000				FMPR MQ,AC
02100				FMPR MQ,KM(I)
02200				FADR MQ,V0(I)
02300				SKIPG T(I)
02400				MOVN MQ,MQ
02500				JRST CEMF]
02600		SKIPN T(I)
02700		JRST[		SKIPN TD(I)
02800				JRST CEMF
02900				MOVE MQ,V0(I)
03000				SKIPGE TD(I)
03100				MOVN MQ,MQ
03200				JRST CEMF]
03300		JUMPE MQ,NOEX
03400		MOVE MQ,V0(I)
03500		SKIPGE T(I)
03600		MOVN MQ,MQ
03700	NOEX:	MOVSI AC,(1.0)
03800		FADR AC,PK(I)
03900		FMPR AC,T(I)
04000		FMPR AC,KM(I)
04100		FADR MQ,AC
04200	CEMF:
04300		MOVE AC,EMF(I)
04400		FMPR AC,TD(I)
04500		MOVSI TAC1,(30.0)
04600		JUMPGE MQ,DRVLT
04700		MOVN AC,AC
04800	DRVLT:	FSBR TAC1,AC			;Available drive voltage
04900		CAMGE TAC1,[1.0]
05000		JRST MAXDRV
05100	VELOK:	MOVM AC,MQ
05200		FDVR AC,TAC1		;AC= REL TIME ON
05300		FIX AC,211000		;1=16
05400		CAML AC,[4000000]
05500		JRST DHO		;too much force stop the arm
05600		CAILE AC,776000
05700	MAXDRV:	MOVEI AC,776000
05800	IFN REPORT+TRACK+USER+DEB,<
05900		MOVEM AC,MOTOR(I)
06000		SKIPGE MQ
06100		MOVNS MOTOR(I)
06200	>
06300		TRC AC,400000
06400		HRL AC,I
06500	SETDRV:
06600	IFN TRACK,<SKIPN WALK>
06700		DATAO WIDTH,AC
06800		TDZ DATWD,DMASK(I)
06900		JUMPGE MQ,ISP
07000		TDO DATWD,DMASK(I)
07100	ISP:	SKIPE REV(I)
07200		TDC DATWD,DMASK(I)
07300	IFN REPORT,<PUSH DATA,MOTOR(I)>
07400		DATAO ARM,DATWD
07500		SOJGE I,RSTRT
07600		JFCL 10,DHO
07700	IFN TRACK,<SKIPN WALK>
     

00100	IFN SIMU,<			;IF IN SIMU PREDICT NEXT VALUE OF THETA
00200		MOVEI I,5
00300	PNT:	MOVE AC,T0(I)		;PRESENT VALUE
00400		FSC AC,1		;X 2
00500		FSBR AC,T0P(I)		;PREVIOUS VALUE
00600		MOVEM AC,TH(I)		;IS NEXT VALUE
00700		SOJGE I,PNT
00800	>
00900		TRZ VZERO
01000		SETZM ASTP
01100		TRNE STP
01200		JRST[	MOVEI I,5
01300		MTL:	MOVE MQ,TORE(I)
01400			FDVR MQ,F0(I)
01500			SKIPN TD(I)
01600			FSC MQ,-2
01700			FMPR MQ,STQ(I)
01800			FADRM MQ,ASTP
01900			SOJGE I,MTL
02000			MOVE AC,ASTP
02100			CAML AC,SDTQ
02200			JRST[	AOS AC,ASTPP
02300				CAIL AC,2
02400				JRST[	TRZ STP
02500					SUB P,[XWD 1,1]
02600					SETZM ERRINT
02700					MOVE AC,[XWD ERRINT, ERRINT+1]
02800					BLT AC,ERRINT+5
02900					JRST RUDONE]
03000				POPJ P,]
03100			SETZM ASTPP
03200			POPJ P,]
03300		POPJ P,
03400	
03500	NULL:	SETZB AC,TAC1
03600		TLNN DATWD,NNUL
03700		TRNE WOB
03800		SOJA J,MODT0
03900		TDNN DATWD,GMASK(I)
04000		SOJA J,DRIVE
04100		MOVE MQ,FBI
04200		TDNN MQ,GMASK(I)
04300		SOJA J,PDIR
04400		MOVM MQ,TAC			;|POSITION ERROR|
04500		CAMLE MQ,ERR(I)			;COMPARE POSITION ERROR
04600		JRST MODT0
04700		MOVM MQ,TD(I)
04800		CAMLE MQ,ERR(I)
04900		JRST MODT0
05000	SO:	TDZ DATWD,BMASK(I)
05100	IFN REPORT+TRACK+USER+DEB,<SETZM MOTOR(I)>
05200		DATAO ARM,DATWD
05300		HRLZ MQ,I
05400		TRC MQ,400000
05500		DATAO WIDTH,MQ
05600		SOJA J,DRIVE
05700		POPJ P,
05800	
05900		XLIST
06000		SUBTTL	SPACEWAR CODE				LOU PAUL
06100		LIST
     

00100	NXTH:	MOVE AC,[XWD T0,T0P]
00200		BLT AC,T0P+5
00300		TRNE WOB
00400		JRST[	MOVEI I,2
00500		WL1:	SOSGE J,WOBCNT(I)
00600			JRST[	MOVEI J,=19
00700				MOVEM J,WOBCNT(I)
00800				JRST WL2]
00900		WL2:	MOVE AC,SIN(J)
01000			FMPR AC,WOBMAG
01100			FADRM AC,TFF+3(I)
01200			SOJGE I,WL1
01300			JRST .+1]
01400		TRNE DROP
01500		JRST[	MOVEI I,5
01600		OL:	MOVE AC,DELTH(I)
01700			FMPR AC,TDF
01800			FADRM AC,DTH(I)
01900			SOJGE I,OL
02000			JRST JALS]
02100	NTH:
02200		TRNE INCREM
02300		JRST[	MOVE MQ,ETIME
02400			ADDB MQ,TICKS
02500			CAML MQ,NTICKS
02600			JRST[	TRZ INCREM
02700				SKIPN TP
02800				TRO FINAL
02900				MOVEI AC,=600
03000				MOVEM AC,COUNT
03100				SKIPN TP(I)
03200				TLNN DATWD,INT
03300				JRST FIL1
03400				MOVE AC,[XWD NC,CI]
03500				BLT AC,CII+5
03600			FIL1:	MOVEI I,5
03700			FIL:	MOVE AC,DELTH(I)
03800				FADRB AC,DTH(I)
03900				FADR AC,TFF(I)
04000				MOVEM AC,T0(I)
04100				SETZM DELTH(I)
04200				SOJGE I,FIL
04300				POPJ P,]
04400			SETZ I,
04500			DIV MQ,NTICKS
04600			ASH MQ,-10
04700			FSC MQ,200
04800			MOVSI AC,(6.0)
04900			FMPR AC,MQ
05000			FADR AC,[-15.0]
05100			FMPR AC,MQ
05200			FADR AC,[10.0]
05300			FMPR AC,MQ
05400			FMPR MQ,MQ
05500			FMPR MQ,AC
05600			MOVEI I,5
05700		LDC:	MOVE AC,DELTH(I)
05800			FMPR AC,MQ
05900			FADR AC,DTH(I)
06000			FADR AC,TFF(I)
06100			MOVEM AC,T0(I)
06200			SKIPN TP
06300			TLNN DATWD,INT
06400			JRST LDC1
06500			MOVE AC,DCI(I)
06600			FMPR AC,MQ
06700			FADR AC,PC(I)
06800			MOVEM AC,CI(I)
06900			MOVE AC,DCII(I)
07000			FMPR AC,MQ
07100			FADR AC,PCC(I)
07200			MOVEM AC,CII(I)
07300		LDC1:	SOJGE I,LDC
07400			POPJ P,]
07500	JALS:	MOVEI I,5
07600	JAL:	MOVE AC,DTH(I)
07700		FADR AC,TFF(I)
07800		MOVEM AC,T0(I)
07900		SOJGE I,JAL
08000		POPJ P,
08100	
     

00100	EVAL:	MOVEI I,5
00200	EL:	MOVE J,TP(I)	;POINTS TO KOE5
00300		JUMPE J,NE
00400		MOVE MQ,ETIME
00500		ADDB MQ,TJ(I)
00600		CAML MQ,TN(I)	;NUMBER OF TICKS THIS SEGMENT
00700		JRST[			;END OF SEGMENT
00800			CAIN I,5
00900			JRST[			;JOINT 6 HAS CONTROL WORD
01000				MOVE TAC,TICKS
01100				CAMGE TAC,NTICKS
01200				TRO INCREM
01300				LDB TAC,[POINT 3,1(J),2]	;LEVEL
01400				JUMPN TAC,[			;SWITCH POINT
01500					SKIPG LOOP(TAC)
01600					JRST[			;INITIALIZE LOOP
01700						LDB AC,[POINT 15,1(J),17]
01800						MOVEM AC,LOOP(TAC)	;COUNT
01900						JRST SETALT]
02000					SOSLE LOOP(TAC)		;IN LOOP
02100				SETALT:	TRO ALT
02200					JRST GETNXT]
02300				JRST GETNXT]
02400		GETNXT:	TRNE ALT
02500			JRST[	LDB J,[POINT 9,(J),8]	;ALT POINTER
02600				JRST GOT]
02700			LDB J,[POINT 9,(J),17]		;NEXT POINTER
02800			JUMPE J,[SETZM TP(I)
02900				TRO FINAL
03000				MOVEI AC,=600
03100				MOVEM AC,COUNT
03200				MOVE TAC,[XWD NC,CI]
03300				BLT TAC,CI+=11
03400				MOVE AC,A4(I)
03500				ADD AC,A3(I)
03600				ADD AC,A2(I)
03700				ADD AC,A1(I)
03800				ADD AC,A0(I)
03900				XOR AC,SC(I)
04000				FSC AC,0
04100				MOVEM AC,TFF(I)
04200				JRST NE]
04300		GOT:	ADDI J,(CBUF)
04400			MOVEM J,TP(I)
04500			SUB MQ,TN(I)	;MICRO SEC INTO NEW SEGMENT
04600			MOVEM MQ,TJ(I)	;INITIALIZE
04700			HRRZ AC,(J)
04800			ASH AC,16
04900			MOVEM AC,TN(I)
05000			CAIN I,5
05100			JRST[
05200				HRRZ AC,1(J)
05300				ADDI AC,(CBUF)
05400				MOVEI MQ,6(AC)
05500				MOVEI K,5
05600				MOVE MQ,(MQ)		;NEW DATWD
05700			FTF:	MOVE TAC,GMASK(K)
05800				TDNN TAC,FBI
05900				JRST[	TDNN TAC,MQ	;WAS FREE
06000					JRST FNF	;STILL FREE
06100					MOVE TAC,TH(K)
06200					MOVEM TAC,T0(K)
06300					FSBR TAC,TFF(K)
06400					MOVEM TAC,DTH(K)
06500					MOVNM TAC,DELTH(K)
06600					MOVE TAC,TN+5
06700					ASH TAC,16
06800					MOVEM TAC,NTICKS
06900					SETZM TICKS
07000					TRO INCREM
07100					JRST FNF]
07200				TDNN TAC,MQ		;NOT FREE
07300				JRST[	MOVE TAC,TDD(K)	;NOW IS FREE
07400					CAIE K,2
07500					FMPR TAC,IRAD
07600					FMPR TAC,CII(K)
07700					FMPR TAC,CII(K)
07800					FSBR TAC,T(K)
07900					MOVNM TAC,NC(K)
08000					JRST FNF]
08100			FNF:	SOJGE K,FTF
08200				PUSHJ P,UPDC
08300				JRST DDELC]
08400		DDELC:	HLRE AC,-3(J)
08500			MOVEM AC,A4(I)
08600			HRRE AC,-3(J)
08700			MOVEM AC,A3(I)
08800			HLRE AC,-2(J)
08900			MOVEM AC,A2(I)
09000			HRRE AC,-2(J)
09100			MOVEM AC,A1(I)
09200			HLLZ AC,-1(J)
09300			MOVEM AC,SC(I)
09400			HRRE AC,-1(J)
09500			MOVEM AC,A0(I)
09600			MOVE MQ,TJ(I)
09700			JRST ELL]
09800	ELL:	DIV MQ,TN(I)
09900		TLNE DATWD,INT
10000		CAIE I,5
10100		JRST ELL1
10200		MOVEI K,=11
10300		HLRE TAC,MQ
10400		FSC TAC,211
10500	DECC:	MOVE AC,DCI(K)
10600		FMPR AC,TAC
10700		FADR AC,PC(K)
10800		MOVEM AC,CI(K)
10900		SOJGE K,DECC
11000	ELL1:	MOVE AC,A4(I)
11100		MUL AC,MQ
11200		ADD AC,A3(I)
11300		MUL AC,MQ
11400		ADD AC,A2(I)
11500		MUL AC,MQ
11600		ADD AC,A1(I)
11700		MUL AC,MQ
11800		ADD AC,A0(I)
11900		XOR AC,SC(I)
12000		FSC AC,0
12100		MOVEM AC,TFF(I)
12200		CAIN I,5
12300		JRST[	MOVE AC,TFF+5
12400			FSBR AC,T0+5
12500			MOVSI MQ,(180.0)
12600			CAML AC,MQ
12700			JRST[	INCT0:	FSC MQ,1
12800					FADRM MQ,T0+5
12900					JRST .+1]
13000			MOVN MQ,MQ
13100			CAMG AC,MQ
13200			JRST INCT0
13300			JRST .+1]
13400	NE:	SOJGE I,EL
13500		TRZ ALT
13600		POPJ P,
13700	
     

00100	DHO:	AOJ I,			;DISASTER HAS OCCURED
00200		LSH I,3			;JOINT NUMBER
00300		IORI I,EXER
00400		MOVEM I,TRAJER
00500		POP P,I
00600	ZITO:	SETZM ERRINT
00700		MOVE AC,[XWD ERRINT,ERRINT+1]
00800		BLT AC,ERRINT+5
00900	
01000	TOFF:	MOVE AC,STKPTR
01100		MOVEM AC,ERRSTK
01200		DATAO DEVT,[0]
01300		MOVEI L,1000
01400		TRNE RONLY
01500		JRST READED
01600		TRZ RUN+FINAL+DROP+INCREM+HCL+STP+WOB		;STOP THE ARM
01700		SETZM TP
01800		MOVE AC,[XWD TP,TP+1]
01900		BLT AC,TP+5
02000		PUSHJ P,SETSET
02100	MOVNXT:	AOS AC,STKPTR
02200	MOVNX:	SOJL L,[ LE:
02300			MOVEI TAC,LOOPER
02400			MOVEM TAC,TRAJER
02500			JRST PW]
02600		HLRE TAC,@STKPTR
02700		CAIN TAC,3		;IS IT A WAIT
02800		JRST MOVNXT
02900		CAIN TAC,SKPERR
03000		JRST[	HRRZ TAC,(AC)
03100			CAMN TAC,TRAJER
03200			JRST[	AOS STKPTR
03300				JRST NEXT]
03400			JRST MOVNXT]
03500		CAIN TAC,SKPNER
03600		JRST[	HRRZ TAC,(AC)
03700			CAME TAC,TRAJER
03800			JRST[	AOS STKPTR
03900				JRST MOVNXT]
04000			JRST NEXT]
04100		CAIN TAC,SKPSER
04200		JRST[	LDB MQ,[POINT 3,(AC),35]
04300			LDB TAC,[POINT 3,TRAJER,35]
04400			CAIN TAC,(MQ)
04500			JRST[	HRRZ TAC,(AC)
04600				ANDI TAC,777770
04700				TDNE TAC,TRAJER
04800				JRST[	AOS STKPTR
04900					JRST NEXT]
05000				JRST MOVNXT]
05100			JRST MOVNXT]
05200		CAIN TAC,JMPREL
05300		JRST[	HRRE TAC,(AC)
05400			ADDI AC,(TAC)
05500			HRRM AC,STKPTR
05600			JRST MOVNX]
05700	PW:	CAIL AC,BUF
05800		HRRM AC,JUMPBK
05900		MOVEI AC,WAITIN
06000		MOVEM AC,STKPTR
06100		MOVEI AC,3
06200		MOVEM AC,FUNCT
06300	IFN TRACK,<SKIPN WALK>
06400		DATAO ARM,[2]		;STOP THE ARM
06500	IFN REPORT,<PUSH DATA,[0]>
06600	READED:	TRO DTST
06700	IFN DEB,<
06800		MOVEM 17,ACSAV+17
06900		MOVEI 17,ACSAV
07000		BLT 17,ACSAV+16
07100	>
07200		JRST SWDONE
07300	
     

00100	NEXT:	TRNE RUN
00200		JRST[	SETZM FUNCT
00300			JRST NXTJIF]
00400		MOVEI L,1000
00500		MOVE AC,FUNCT
00600		CAIE AC,6		;SET TOUCH
00700		JRST[	MOVE TAC,SOTCHS
00800			MOVEM TAC,SOTCH
00900			TRZ STCH
01000			JUMPE TAC,.+1
01100			TRO STCH
01200			JRST .+1]
01300	IFN TRACK,<SKIPN WALK>
01400		MOVEI DATWD,2
01500		DATAO ARM,DATWD		;STOP THE ARM
01600	INCPIC:	AOS AC,STKPTR
01700	PICKUP:	SOJL L,LE
01800		HLRE TAC,@STKPTR
01900		CAIN TAC,JMPABS
02000		JRST[JMPA:HRRZ TAC,@STKPTR
02100			MOVEM TAC,STKPTR
02200			HLRZ TAC,@STKPTR
02300			CAIN TAC,3
02400			JRST INCPIC
02500			JRST PICKUP]
02600		CAIN TAC,SKPERR
02700		JRST[	HRRZ TAC,@STKPTR
02800			CAMN TAC,TRAJER
02900			AOS STKPTR
03000			JRST INCPIC]
03100		CAIN TAC,SKPNER
03200		JRST[	HRRZ TAC,@STKPTR
03300			CAME TAC,TRAJER
03400			AOS STKPTR
03500			JRST INCPIC]
03600		CAIN TAC,SKPSER
03700		JRST[	LDB MQ,[POINT 3,@STKPTR,35]
03800			LDB TAC,[POINT 3,TRAJER,35]
03900			CAIN TAC,(MQ)
04000			JRST[	HRRZ TAC,@STKPTR
04100				ANDI TAC,777770
04200				TDNE TAC,TRAJER
04300				AOS STKPTR
04400				JRST INCPIC]
04500			JRST INCPIC]
04600		CAIN TAC,JMPREL
04700		JRST[	HRRE TAC,@STKPTR
04800			ADD TAC,STKPTR
04900			HRRM TAC,STKPTR
05000			JRST PICKUP]
05100		SETZM TRAJER
05200		MOVEI I,100
05300		MOVEM I,COUNT
05400		TRZE TAC,MERGE
05500		TRO BOTH
05600		MOVEM TAC,FUNCT
05700		CAIN TAC,3		;IS IT A WAIT
05800		JRST[	MOVE TAC,STKPTR
05900			CAIL TAC,BUF
06000			HRRM TAC,JUMPBK
06100			MOVEI TAC,WAITIN
06200			MOVEM TAC,STKPTR
06300	IFN REPORT,<PUSH DATA,[0]>
06400			TRO DTST
06500			PUSHJ P,SWDONE]
06600	MARK:
06700	IFN REPORT,<
06800		PUSH DATA,[<SIXBIT/NEXT/>+1]
06900		MOVE TAC,FUNCT
07000		HRL TAC,0
07100		PUSH DATA,TAC
07200	>
07300	
07400	;	JRST DISP
07500	SWDONE:
07600		MOVEM BITSAV
07700		MOVEM DATWD,DATWDS
07800		MOVEM CBUF,CBUFS
07900	IFN REPORT+TRACK,<
08000		MOVEM DATA,DATPT
08100	>
08200	IFE USER,<
08300	IFN TRACK,<
08400		SKIPE WALK
08500		JRST @STRADR-1
08600	>
08700		CALLI 400024
08800	>
08900	IFN USER,<
09000		JRST @STRADR-1
09100	>
09200	
09300	SETSET:	MOVEI I,5
09400	TCHK:	MOVE J,TP(I)
09500		JUMPE J,ATEND
09600		SETZM TJ(I)
09700		SETZM TN(I)
09800	GNN:	LDB J,[POINT 9,(J),17]
09900		ADDI J,(CBUF)
10000		CAIN J,(CBUF)
10100		JRST[	MOVEM J,TP(I)
10200			JRST ATEND]
10300		JRST GNN
10400	ATEND:	SOJGE I,TCHK
10500		PUSHJ P,EVAL
10600		MOVEI I,5
10700	FDTH:	MOVE AC,TH(I)
10800		MOVEM AC,T0(I)
10900		FSBR AC,TFF(I)
11000		MOVEM AC,DTH(I)
11100		SETZM DELTH(I)
11200		SETZM TDP(I)
11300		SETZM TDD(I)
11400		SOJGE I,FDTH
11500		POPJ P,
11600	
11700	
11800	UPDC:	MOVE TAC,[XWD NC,PC]
11900		BLT TAC,PCC+5
12000		HRL AC,AC
12100		HRRI AC,NC
12200		BLT AC,NC+6
12300		MOVE DATWD,NC+6
12400		TLNE DATWD,NXTFN
12500		JRST[	AOS AC,STKPTR
12600			HLRE AC,(AC)
12700			MOVEM AC,FUNCT
12800			JRST .+1]
12900		HRRZM DATWD,FBI
13000		MOVEI K,5
13100	UPL:	MOVE AC,NC(K)
13200		HLLZM AC,NC(K)
13300		HRLZM AC,NCC(K)
13400		MOVE AC,MOTARM(K)
13500		FADRB AC,NCC(K)
13600		TLNN DATWD,INT
13700		JRST UPL1
13800		FSBR AC,PCC(K)
13900		MOVEM AC,DCII(K)
14000		MOVE AC,NC(K)
14100		FSBR AC,PC(K)
14200		MOVEM AC,DCI(K)
14300	UPL1:	TDNE DATWD,BMASK(K)
14400		TDO DATWD,BMASK(K)
14500		SOJGE K,UPL
14600		TLNE DATWD,INT
14700		POPJ P,
14800		MOVE AC,[XWD NC,CI]
14900		BLT AC,CII+5
15000		POPJ P,
     

00100	PREAD:
00200	IFN TRACK,<
00300		SKIPE WALK
00400		JRST[GNPR:AOBJP DATA,[	MOVE AC,[IOWD DBL,DATO]
00500					MOVEM AC,DATPT
00600					MOVE DATA,DATPT
00700					SETZ TAC,
00800					INPUT 15,1
00900					JRST GNPR]
01000			MOVE DACVAL,(DATA)
01100			JRST @READFN]
01200	>
01300		MOVEI TAC,10
01400		MOVEM TAC,DATMSD
01500	DACRED:	SOSGE DATMSD
01600		JRST[REDER:	MOVEI TAC,READER	
01700				MOVEM TAC,TRAJER
01800				JRST TOFF]
01900	DACST:	CONO DB,4250
02000		CONO AD,(K)
02100	NREAD:	MOVEI TAC,30
02200		CONSO DB,1000
02300		SOJGE TAC,.-1
02400		JUMPL TAC,[DACDIE:CONO AD,4000(K)	;STOP DAC
02500				TRO REREAD
02600			IFN DEB,<MOVEM DACVAL,DACERR>
02700				MOVEI TAC,12
02800			WRH:	SOJGE TAC,WRH
02900				JRST DACRED]
03000		DATAI DB,DACVAL
03100		CONSZ DB,10000
03200		JRST DACDIE
03300		XOR DACVAL,SBMSK
03400	IFN TRACK,<PUSH DATA,DACVAL>
03500		JRST @READFN
03600	FREAD:	ADDI K,770000
03700	IFN TRACK,<SKIPN WALK>
03800		CONO AD,4000(K)	;STOP AD ON NEXT CHANNEL
03900		POPJ P,
04000	READFN:	FREAD
04100	
04200		XLIST
04300		SUBTTL	CONSTANTS				LOU PAUL
04400		LIST
     

00100	NON:	POINT 12,INNER(AC),11
00200		POINT 12,INNER(AC),23
00300		POINT 12,INNER(AC),35
00400		POINT 12,OUTER(AC),11
00500		POINT 12,OUTER(AC),23
00600		POINT 12,OUTER(AC),35
00700	ERR:	0.05
00800		0.05
00900		0.01
01000		0.1
01100		0.1
01200		0.7
01300	IFN SIMU,<
01400		TH-1
01500	ARM.TH:	.+4
01600	>
01700	TH:	-180.0		;THE NEXT 7 LOCATIONS ARE BLOCK TRANSFERED.
01800		-90.0
01900		12.0
02000		-90.0
02100		90.0
02200		0.0
02300	IFN SIMU,<ARM.GR:>
02400	HAND:	3.0
02500	TDD:	BLOCK 6
02600	ERRINT:	0
02700		0
02800		0
02900		0
03000		0
03100		0
03200	DTH:	BLOCK 6
03300	TD:	BLOCK 6
03400	T0P:	BLOCK 6
03500	TDP:	BLOCK 6
03600	ET0:	BLOCK 6
03700	T0:	-150.0
03800		-75.0
03900		14.0
04000		-90.0
04100		 60.0
04200		 0.0000
04300	TFF:	-150.0
04400		-75.0
04500		14.0
04600		-90.0
04700		 60.0
04800		 0.0000
04900	DELTH:	BLOCK 6		;THIS AND THE NEXT ARE BLT ED TOGETHER
05000	DDTH:	0
05100		0
05200		0
05300		0
05400		0
05500		0
05600	NTICKS:	0
05700	DTHS:	BLOCK =30
05800	TORE:	BLOCK 6
05900	T:	BLOCK 6
06000	IFN USER+REPORT+TRACK+DEB,<MOTOR:	BLOCK 6>
06100	FBI:	252502
06200	VZ:	BLOCK 3
06300	IFN TACH,<
06400	VDTH:	BLOCK 3
06500	>
06600	THP:	BLOCK 6
06700	MOTARM:	840.0
06800		900.0
06900		70.0
07000		55.0
07100		55.0
07200		64.0
07300	STQ:	BLOCK 6
07400	SDTQ:	0
07500	ASTP:	0
07600	ASTPP:	0
07700	PC:	BLOCK 6
07800	PCC:	BLOCK 6
07900	DCI:	BLOCK 6
08000	DCII:	BLOCK 6
08100	CI:	0
08200		0
08300		0
08400		0
08500		0
08600		0
08700	CII:	1000.0
08800		1200.0
08900		100.0
09000		100.0
09100		100.0
09200		100.0
09300	NC:	0
09400		0
09500		0
09600		0
09700		0
09800		0
09900	NCC:	1000.0
10000		1200.0
10100		100.0
10200		100.0
10300		100.0
10400		100.0
10500	IFN DEB,<DACERR:	0>
10600	REFTR:	0
10700	ETIME:	=16667
10800	TDF:	1.0
10900	IFN DEB,<
11000	ETIM:	0
11100	ACSAV:	BLOCK 20
11200	>
11300	PDL:	DHO
11400		BLOCK PDLL
11500	LTIME:	0
11600	IFN SIMU,<ARM.FU:>
11700	FUNCT:	0
11800	ROT6:	0
11900	TRAJER:	0
12000	DOING:	0
12100	DATMSD:	0
12200	CBUFS:	0
12300	DATWDS:	0
12400	SNUM:	POINT 12,DACVAL,23
12500	SBMSK:	400040004000
12600	REV:	0
12700		0
12800		-1
12900		0
13000		-1
13100		-1
13200	DMASK:	400000
13300		100000
13400		20000
13500		4000
13600		1000
13700		200
13800	BMASK:	XWD 400000,200000
13900		XWD 200000, 40000
14000		XWD 100000, 10000
14100		XWD  40000,  2000
14200		XWD  20000,   400
14300		XWD  10000,   100
14400	GMASK:	200000
14500		 40000
14600		 10000
14700		  2000
14800		   400
14900		   100
15000	VCHAN:	52B23
15100		53B23
15200		54B23
15300	CHAN:	55B23
15400		56B23
15500		57B23
15600		60B23
15700		61B23
15800	GAIN:	MOVEI I,5
15900	SETGN:	MOVE AC,KV(I)
16000		FMPR AC,AC
16100		FMPR AC,THIRD
16200		MOVEM AC,KE(I)
16300		FMPR AC,KV(I)
16400		FMPR AC,SIXTH
16500		MOVEM AC,KI(I)
16600		SOJGE I,SETGN
16700	SETNM:	MOVE 1,[SIXBIT/[ARM]/]
16800		CALLI 1,400002
16900		MOVE I,RET
17000		MOVEM I,SETNM
17100		JRST SETNM
17200	RET:	POPJ P,
17300	THIRD:	0.3
17400	SIXTH:	0.1
17500		BLOCK =20
17600		0
17700	WAITIN:	XWD 3,0
17800	JUMPBK:	XWD JMPABS,WAITIN
17900	STKPTR:	WAITIN
18000	ERRSTK:	0
18100	BITSAV:	0
18200	COUNT:	0
18300	STWT:	0
18400	HCNT:	0
18500	TP:	0
18600		0
18700		0
18800		0
18900		0
19000		0
19100	TJ:	BLOCK 6
19200	LOOP:	BLOCK 10
19300	TN:	BLOCK 6
19400	SC:	BLOCK 6
19500	A0:	BLOCK 6
19600	A1:	BLOCK 6
19700	A2:	BLOCK 6
19800	A3:	BLOCK 6
19900	A4:	BLOCK 6
20000	BLOCKS:	0
20100	NXTBUF:	0
20200	BUF:	0
20300		BLOCK 1000
20400	BUF2:	0
20500		BLOCK 1000
20600	IFN REPORT+TRACK,<
20700	DATIWD:	0
20800		0
20900	DATPT:	0
21000	DATO:	BLOCK DBL+100
21100	>
21200	IFN DYNAMICS,<
21300	DDAT:	<SIXBIT/FORD/>+6
21400	FOR:	BLOCK 6
21500		<SIXBIT/BACK/>+6
21600	BAK:	BLOCK 6
21700	>